//+FHEADER /////////////////////////////////////////////////////////////////////////////
// FILE NAME :  ldpc_top.v
// DEPARTMENT:  N/A
// AUTHOR:DingXU
// AUTHOR'S EMAIL : N/A
// --------------------------------------------------------------------------
// RELEASE HISTORY :
// VERSION DATE AUTHORDESCRIPTION:
// 1.0 2020-05-17  DingXU initial version  
// Added comments in header:
//---------------------------------------------------------------------------
// KEYWORDS :   ldpc,top
//--------------------------------------------------------------------------
// PURPOSE:   ldpc  top
// --------------------------------------------------------------------------
// PARAM NAME RANGE:  N/A
// -----------------------------------------------------------------------
// REUSE ISSUES:
// Reset Strategy : Asynchronous, active low system level reset : 
// Clock Domains : i_clk 
// Critical TiminG: N/A
// Instantiations : no
// Synthesizable : no 
//-FHEADER //////////////////////////////////////////////////////////////////////
module ldpc_top(
               i_rst_n         ,
               i_ldpc_clk      ,
               i_clk           ,
               i_w_en          ,
               i_r_en          ,
               i_data          ,
               i_code_en       ,
               i_dcd_en        ,

               o_data          ,
               o_status        ,
               o_code_finish   ,
               o_dcd_finish 
               );
               
///////////////////////////////////////
//declaration of input & output
///////////////////////////////////////
input           i_rst_n        ;
input           i_ldpc_clk     ;
input           i_clk          ;
input           i_w_en         ;
input           i_r_en         ;
input   [0:95]  i_data         ;
input           i_code_en      ;
input           i_dcd_en    ;
            
output  [0:95]  o_data         ;
output          o_status       ;
output          o_code_finish  ;
output          o_dcd_finish;

///////////////////////////////////////
//declaration of registers & wires
///////////////////////////////////////
wire    [0:95]  o_data         ;
wire            o_status       ;
wire            o_code_finish  ;
wire            o_dcd_finish;
wire    [0:95]  i_r_data       ;
wire            i_full         ;
wire            i_empty        ;
wire            o_full1        ;
wire            o_empty1       ;
wire    [0:95]  o_w_data       ;
wire            o_w_en         ;
wire            o_r_en         ;

/////////////////////////////////////// 
afifo_in u0(           
            .i_rst_n(i_rst_n)         ,
            .i_r_clk(i_ldpc_clk)      ,
            .i_w_clk(i_clk)           ,
            .i_r_en(o_r_en)           ,
            .i_w_en(i_w_en)           ,
            .i_w_data(i_data)         ,
            .o_r_data(i_r_data)       ,
            .o_full(i_full)           ,
            .o_empty(i_empty)         
            );

            
/////////////////////////////////////// 
afifo_out u1(           
            .i_rst_n(i_rst_n)         ,
            .i_r_clk(i_clk)           ,
            .i_w_clk(i_ldpc_clk)      ,
            .i_r_en(i_r_en)           ,
            .i_w_en(o_w_en)           ,
            .i_w_data(o_w_data)       ,
            .o_r_data(o_data)         ,
            .o_full(o_full1)          ,
            .o_empty(o_empty1)         
            );

///////////////////////////////////////             
code_top u2 (
            .i_rst_n(i_rst_n)         ,
            .i_ldpc_clk(i_ldpc_clk)   ,
            .i_data(i_r_data)         ,
            .i_code_en(i_code_en)     ,
            .i_full(i_full)           ,
            .i_empty(i_empty)         ,              
            .o_data(o_w_data)         ,
            .o_w_en(o_w_en)           ,
            .o_r_en(o_r_en)           ,
            .o_code_finish(o_code_finish)              
            );
            
            
            
endmodule

      
            

            

